import { Notification } from 'element-ui'

/**
 * @description 接收数据流生成blob，创建链接，下载文件
 * @param {Function} api 导出表格的api方法(必传)
 * @param {String} tempName 导出的文件名(必传)
 * @param {Object} params 导出的参数(默认为空对象)
 * @param {Boolean} isNotify 是否有导出消息提示(默认为 true)
 * @param {String} fileType 导出的文件格式(默认为.xlsx)
 * @return void
 * */
export const useDownload = async (
  api,
  tempName,
  params,
  isNotify = true,
  fileType = '.xlsx',
) => {
  if (isNotify) {
    Notification({
      title: '温馨提示',
      message: '如果数据庞大会导致下载缓慢哦，请您耐心等待！',
      type: 'info',
      duration: 3000,
    })
  }
  try {
    const res = await api(params)
    // 这个地方的 type，经测试不传也没事，因为会自动识别文件类型
    // const blob = new Blob([res], {
    // 	type: "application/vnd.ms-excel;charset=UTF-8"
    // });
    const raw = window.atob(res.response.FileBase64)
    const uInt8Array = new Uint8Array(raw.length)
    for (let i = 0; i < raw.length; i++)
      uInt8Array[i] = raw.charCodeAt(i)
    const blob = new Blob([uInt8Array])
    const navigatorAny = window.navigator

    // 兼容edge不支持createObjectURL方法
    if ('msSaveOrOpenBlob' in navigator)
      return navigatorAny.msSaveOrOpenBlob(blob, tempName + fileType)
    const blobUrl = window.URL.createObjectURL(blob)
    const exportFile = document.createElement('a')
    exportFile.style.display = 'none'
    exportFile.download = `${tempName}${fileType}`
    exportFile.href = blobUrl
    document.body.appendChild(exportFile)
    exportFile.click()
    // 去除下载对url的影响
    document.body.removeChild(exportFile)
    window.URL.revokeObjectURL(blobUrl)
  }
  catch (error) {
    console.log(error)
  }
}
